package cn.px.service.upms;


import cn.px.dao.bean.MyPage;
import cn.px.dao.dto.upms.SysDeptDTO;
import cn.px.dao.dto.upms.SysUserDTO;
import cn.px.dao.entity.upms.SysUser;
import cn.px.dao.vo.SysUserVO;
import cn.px.dao.vo.UserInfoVO;
import cn.px.dao.vo.im.base.ImportResultVO;
import cn.px.dao.vo.im.upms.ImportSysUserVO;
import cn.px.service.base.IBaseService;

import java.util.List;

/**
 * @Description 用户 service
 * @author 品讯科技
 * @date 2024-08
 * @Version Copyright (c) 2019,北京乾元坤和科技有限公司 All rights reserved.
 */
public interface SysUserService extends IBaseService<SysUser, SysUserDTO> {
    void unsealUser();

    /**
     * 通过用户名称查询系统用户
     *
     * @param userName ：用户有名称
     * @return ：
     */
    SysUser selectByUsername(String userName);

    /**
     * 通过userId查询系统用户
     *
     * @param userId ：用户ID
     * @return ：
     */
    SysUserVO selectUserVO(String userId);

    /**
     * 查询用户信息
     *
     * @param userName 用户名
     * @return userInfo
     */
    UserInfoVO selectUserInfo(String userName);

    UserInfoVO getUserInfoVO(SysUser sysUser);

    /**
     * 手机号查询用户信息
     *
     * @param phone 手机号
     * @return userInfo
     */
    SysUser selectUserInfoByPhone(String phone);

    /**
     * openId查询用户信息
     *
     * @param openId openId
     * @return userInfo
     */
    SysUser selectUserInfoByOpenId(String openId);

    /**
     * 修改用户状态
     *
     * @param userId ：用户
     * @param status ：状态
     * @return ：
     */
    int updateStatus(String userId, Integer status,Integer flag);

    /**
     * 修改头像
     *
     * @param avatar ：头像
     * @return ：
     */
    int updateAvatar(String avatar);

    /**
     * 修批量删除用户
     *
     * @param userIds ：用户
     * @return ：
     */
    int deleteUsers(List<String> userIds);

    /**
     * 重置密码
     *
     * @param userId
     */
    void resetPwd(String userId);

    void updateUser(SysUser sysUser);

    /**
     * 修改密码
     *
     * @param password    :
     * @param oldPassword :
     */
    void changePwd(String password, String oldPassword);

    /**
     * 分页
     *
     * @param record   ：
     * @param pageNum  ：
     * @param pageSize ：
     * @return ：
     */
    MyPage<SysUserVO> selectVOPageInfo(SysUserDTO record, int pageNum, int pageSize);

    /**
     * 列表
     *
     * @param record ：
     * @return ：
     */
    List<SysUserVO> selectUserVOs(SysUserDTO record);

    /**
     * 修改手机号
     *
     * @param sysUserDTO
     * @return
     */
    int updateMobile(SysUserDTO sysUserDTO);

    /**
     * 根据部门查询当前部门指定父级  再查询指定父级下的指定部门人员
     *
     * @param nature     ：
     * @param sysDeptDTO ：
     * @return ：
     */
    List<SysUserVO> usersByParentDeptNatureAll(String nature, SysDeptDTO sysDeptDTO);

    /**
     * 根据当前登录人的部门查询当前部门指定父级  再查询指定父级下的指定部门人员
     *
     * @param nature     ：
     * @param sysDeptDTO ：
     * @return ：
     */
    List<SysUserVO> usersByUserParentDeptNatureAll(String nature, SysDeptDTO sysDeptDTO);

    /**
     * 指定部门的指定类型的
     *
     * @param deptId ：
     * @param type   ：
     * @return ：
     */
    List<SysUserVO> selectDeptManager(String deptId, Integer type);


    /**
     * 指定部门的指定类型的负责人
     *
     * @param type ：
     * @return ：
     */
    List<SysUserVO> selectUserDeptManager(Integer type);

    /**
     * 当前部门下级角色的人
     *
     * @param sysUserDTO
     * @return
     */
    List<SysUserVO> getDeptChildrenRoleUser(SysUserDTO sysUserDTO);
    List<SysUserVO> getProjectRoleUser(SysUserDTO sysUserDTO);

    /**
     * 导入
     *
     * @param users  ：
     * @param deptId :
     * @return :
     */
    ImportResultVO importUsers(String deptId, List<ImportSysUserVO> users);

    /**
     * 修改工作状态
     *
     * @param userId
     * @param workStatus
     */
    void updateUserWorkStatus(String userId, Integer workStatus, SysUserDTO sysUserDTO);

    /**
     * 获取维修人员
     *
     * @param sysUserDTO
     * @return
     */
    List<SysUser> getRepairUser(SysUserDTO sysUserDTO);
}
